Skip to content

WIP: Validate HAProxy 2.8.27 and 3.2.22 - #832

Closed
jcmoraisjr wants to merge 1 commit into
openshift:masterfrom
jcmoraisjr:haproxy-bump
Closed

WIP: Validate HAProxy 2.8.27 and 3.2.22#832
jcmoraisjr wants to merge 1 commit into
openshift:masterfrom
jcmoraisjr:haproxy-bump

Conversation

@jcmoraisjr

Copy link
Copy Markdown
Member

No description provided.

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Aug 6, 2026
@openshift-ci
openshift-ci Bot requested review from Miciah and rfredette August 6, 2026 17:39
@openshift-ci

openshift-ci Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign alebedev87 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jcmoraisjr, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 26 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 10221701-cad0-497f-b81d-b2ffd3996311

📥 Commits

Reviewing files that changed from the base of the PR and between 4b401a8 and 2a91b85.

📒 Files selected for processing (3)
  • images/router/haproxy/Dockerfile.ocp
  • images/router/haproxy28/Dockerfile.ocp
  • images/router/haproxy32/Dockerfile.ocp
📝 Walkthrough

Walkthrough

The HAProxy image Dockerfiles now install pinned HAProxy RPMs from remote URLs instead of installing HAProxy through yum. Each image verifies the installed HAProxy version with haproxy -vv. The package list in each image retains socat and removes the HAProxy package name.

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive No pull request description was provided, so the change intent and implementation details are not documented. Add a concise description that explains the HAProxy version updates and RPM installation changes.
✅ Passed checks (14 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies validation of the HAProxy 2.8.27 and 3.2.22 updates made in the Dockerfiles.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The commit changes only three HAProxy Dockerfiles. It adds no Ginkgo test declarations or test titles, so it introduces no unstable test names.
Test Structure And Quality ✅ Passed The pull request changes only three HAProxy Dockerfiles and adds no Ginkgo tests or cluster operations; the test-structure check is not applicable.
Microshift Test Compatibility ✅ Passed HEAD changes only three HAProxy Dockerfiles; no Go/YAML e2e test files or added Ginkgo declarations are present, so the MicroShift test check is not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The pull request changes only three HAProxy Dockerfiles; it adds no Ginkgo e2e tests or multi-node assumptions requiring SNO protection.
Topology-Aware Scheduling Compatibility ✅ Passed The pull request changes only three Dockerfiles to install and verify HAProxy RPMs; it adds no deployment manifests, operator code, controllers, or scheduling constraints.
Ote Binary Stdout Contract ✅ Passed The PR changes only three Dockerfiles; haproxy -vv runs during image build, and no OTE process-level Go code or stdout logging changed.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR changes only three Dockerfiles and adds no Ginkgo e2e tests; this test-specific IPv6 and disconnected-network check is not applicable.
No-Weak-Crypto ✅ Passed The PR changes only three Dockerfiles. Added lines install HAProxy RPMs, verify versions, and adjust packages; no weak algorithm, custom crypto, or secret comparison was added.
Container-Privileges ✅ Passed The PR changes only three Dockerfiles. Each ends with USER 1001, and the diff adds no privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, or allowPrivilegeEscalation setting.
No-Sensitive-Data-In-Logs ✅ Passed The change logs only HAProxy build/version output and public RPM URLs; added-line scanning found no passwords, tokens, API keys, PII, session IDs, or customer data.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@images/router/haproxy/Dockerfile.ocp`:
- Around line 3-9: Combine the HAProxy RPM installation and package-cache
cleanup into the same RUN layer, preserving the existing haproxy verification
and package installation behavior. Apply this change in
images/router/haproxy/Dockerfile.ocp lines 3-9,
images/router/haproxy28/Dockerfile.ocp lines 3-9, and
images/router/haproxy32/Dockerfile.ocp lines 3-9 so no yum cache remains in the
final image layer.
- Line 3: Replace the mutable GitHub branch-based RPM URLs in
images/router/haproxy/Dockerfile.ocp:3-3,
images/router/haproxy28/Dockerfile.ocp:3-3, and
images/router/haproxy32/Dockerfile.ocp:3-3 with immutable release or commit
references, and verify each downloaded RPM using its expected checksum or a
trusted signature before installation.
- Line 4: Replace the version-agnostic HAProxy checks at
images/router/haproxy/Dockerfile.ocp:4,
images/router/haproxy28/Dockerfile.ocp:4, and
images/router/haproxy32/Dockerfile.ocp:4 with assertions that verify the
installed HAProxy binary reports exactly 3.2.22, 2.8.27, and 3.2.22
respectively, while failing the build on any mismatch.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 169e650f-2885-476c-96d7-326c4da269c3

📥 Commits

Reviewing files that changed from the base of the PR and between 4b401a8 and 0eab346.

📒 Files selected for processing (3)
  • images/router/haproxy/Dockerfile.ocp
  • images/router/haproxy28/Dockerfile.ocp
  • images/router/haproxy32/Dockerfile.ocp

Comment thread images/router/haproxy/Dockerfile.ocp Outdated
FROM registry.ci.openshift.org/ocp/5.0:haproxy-router-base
RUN INSTALL_PKGS="socat haproxy32 rsyslog procps-ng util-linux" && \

RUN yum install -y https://github.com/jcmoraisjr/openshift-router/raw/refs/heads/rpms/haproxy32-3.2.22-1.rhocp.el9.x86_64.rpm

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Files matching Dockerfile.ocp:\n'
git ls-files | grep -E '(^|/)Dockerfile\.ocp$' | sort

printf '\nRelevant snippets:\n'
for f in images/router/haproxy/Dockerfile.ocp images/router/haproxy2十八条/Dockerfile.ocp images/router/haproxy32/Dockerfile.ocp; do
  if [ -f "$f" ]; then
    echo "--- $f"
    sed -n '1,40p' "$f" | cat -n
  fi
done

printf '\nSearch router Dockerfiles for yum/rpm installation and references:\n'
rg -n "yum|dnf|rpm|sha|rhaos|rhocp|openshift-router|github.com/jcmoraisjr" images/router -g 'Dockerfile.ocp' || true

Repository: openshift/router

Length of output: 4373


Pin the RPM content by digest or checksum.

All three images/router/*haproxy*/Dockerfile.ocp files install RPMs from github.com/jcmoraisjr/openshift-router/raw/refs/heads/rpms/. That branch URL can change the package contents without an unchanged Dockerfile being updated. Use an immutable release/commit reference and verify the RPM hash or trusted signature at each install site.

🧰 Tools
🪛 Trivy (0.72.0)

[error] 3-3: 'yum clean all' missing

'yum clean all' is missed: yum install -y https://github.com/jcmoraisjr/openshift-router/raw/refs/heads/rpms/haproxy32-3.2.22-1.rhocp.el9.x86_64.rpm

Rule: DS-0015

Learn more

(IaC/Dockerfile)

📍 Affects 3 files
  • images/router/haproxy/Dockerfile.ocp#L3-L3 (this comment)
  • images/router/haproxy28/Dockerfile.ocp#L3-L3
  • images/router/haproxy32/Dockerfile.ocp#L3-L3
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@images/router/haproxy/Dockerfile.ocp` at line 3, Replace the mutable GitHub
branch-based RPM URLs in images/router/haproxy/Dockerfile.ocp:3-3,
images/router/haproxy28/Dockerfile.ocp:3-3, and
images/router/haproxy32/Dockerfile.ocp:3-3 with immutable release or commit
references, and verify each downloaded RPM using its expected checksum or a
trusted signature before installation.

Comment thread images/router/haproxy/Dockerfile.ocp Outdated
Comment on lines 3 to 9
RUN yum install -y https://github.com/jcmoraisjr/openshift-router/raw/refs/heads/rpms/haproxy32-3.2.22-1.rhocp.el9.x86_64.rpm
RUN haproxy -vv

RUN INSTALL_PKGS="socat rsyslog procps-ng util-linux" && \
yum install -y --setopt=install_weak_deps=0 $INSTALL_PKGS && \
rpm -V $INSTALL_PKGS && \
yum clean all && \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick win

Clean package caches in the same installation layer.

The HAProxy RPM installation runs before the later yum clean all, so the earlier layer's downloaded bytes remain in the image.

  • images/router/haproxy/Dockerfile.ocp#L3-L9: combine the HAProxy RPM installation and cleanup in one RUN.
  • images/router/haproxy28/Dockerfile.ocp#L3-L9: combine the HAProxy RPM installation and cleanup in one RUN.
  • images/router/haproxy32/Dockerfile.ocp#L3-L9: combine the HAProxy RPM installation and cleanup in one RUN.

Trivy reports this missing cleanup. As per path instructions, container builds must have “No package manager cache in final layer”.

🧰 Tools
🪛 Trivy (0.72.0)

[error] 3-3: 'yum clean all' missing

'yum clean all' is missed: yum install -y https://github.com/jcmoraisjr/openshift-router/raw/refs/heads/rpms/haproxy32-3.2.22-1.rhocp.el9.x86_64.rpm

Rule: DS-0015

Learn more

(IaC/Dockerfile)

📍 Affects 3 files
  • images/router/haproxy/Dockerfile.ocp#L3-L9 (this comment)
  • images/router/haproxy28/Dockerfile.ocp#L3-L9
  • images/router/haproxy32/Dockerfile.ocp#L3-L9
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@images/router/haproxy/Dockerfile.ocp` around lines 3 - 9, Combine the HAProxy
RPM installation and package-cache cleanup into the same RUN layer, preserving
the existing haproxy verification and package installation behavior. Apply this
change in images/router/haproxy/Dockerfile.ocp lines 3-9,
images/router/haproxy28/Dockerfile.ocp lines 3-9, and
images/router/haproxy32/Dockerfile.ocp lines 3-9 so no yum cache remains in the
final image layer.

Sources: Path instructions, Linters/SAST tools

Comment thread images/router/haproxy/Dockerfile.ocp Outdated
@jcmoraisjr

Copy link
Copy Markdown
Member Author

/test ?

@jcmoraisjr

Copy link
Copy Markdown
Member Author

Running all haproxy28 related tests:

/test e2e-agnostic-haproxy28-techpreview
/test e2e-aws-serial-haproxy28-techpreview-1of2
/test e2e-aws-serial-haproxy28-techpreview-2of2
/test e2e-upgrade-haproxy28-techpreview

@jcmoraisjr

Copy link
Copy Markdown
Member Author

Provision failed:

[ERROR] Timeout reached. 6 ready nodes expected, found 5... Failing.

/test e2e-agnostic

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-agnositc-haproxy28-techpreview openshift/origin#31494

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@gcs278, testwith: could not generate prow job. ERROR:

BUG: test 'e2e-agnositc-haproxy28-techpreview' not found in injected config

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-agnostic-haproxy28-techpreview openshift/origin#31494

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-aws-serial-haproxy28-techpreview-1of2 openshift/origin#31494

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@gcs278, testwith: could not generate prow job. ERROR:

BUG: test 'e2e-aws-serial-haproxy28-techpreview-1of2' not found in injected config

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-aws-serial-haproxy28-techpreview-2of2 openshift/origin#31494

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@gcs278, testwith: could not generate prow job. ERROR:

BUG: test 'e2e-aws-serial-haproxy28-techpreview-2of2' not found in injected config

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-upgrade-haproxy28-techpreview openshift/origin#31494

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-aws-serial-haproxy28-techpreview openshift/origin#31494

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@gcs278, testwith: job multi-pr-openshift-router-832-openshift-origin-31494-e2e-upgrade-haproxy28-techpreview was triggered but the status URL was not available in time.
You can find the job at: https://prow.ci.openshift.org/?job=multi-pr-openshift-router-832-openshift-origin-31494-e2e-upgrade-haproxy28-techpreview

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@gcs278, testwith: job multi-pr-openshift-router-832-openshift-origin-31494-e2e-aws-serial-haproxy28-techpreview was triggered but the status URL was not available in time.
You can find the job at: https://prow.ci.openshift.org/?job=multi-pr-openshift-router-832-openshift-origin-31494-e2e-aws-serial-haproxy28-techpreview

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@gcs278

gcs278 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/testwith openshift/router/master/e2e-agnostic-haproxy28-techpreview openshift/origin#31494

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base_url='https://prow.ci.openshift.org/view/gs/test-platform-results/logs/multi-pr-openshift-router-832-openshift-origin-31494-e2e-agnostic-haproxy28-techpreview/2085712441596973056'
artifact_prefix='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs/multi-pr-openshift-router-832-openshift-origin-31494-e2e-agnostic-haproxy28-techpreview/2085712441596973056'

echo '== Prow page =='
curl --fail --location --silent --show-error "$base_url" | sed -n '1,100p'

for file in prowjob.json started.json finished.json build-log.txt; do
  echo
  echo "== ${file} =="
  curl --fail --location --silent --show-error "${artifact_prefix}/${file}" \
    | tail -n 300 \
    || true
done

Length of output: 44817


🏁 Script executed:

#!/bin/bash
set -euo pipefail

prefix='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs/multi-pr-openshift-router-832-openshift-origin-31494-e2e-agnostic-haproxy28-techpreview/2085712441596973056'
log_file="$(mktemp)"
trap 'rm -f "$log_file"' EXIT

curl --fail --location --silent --show-error "${prefix}/build-log.txt" >"$log_file"

echo '== nodes-readiness and timeout messages =='
grep -inE -C 12 'nodes-readiness|ready nodes expected|timeout reached|not ready|ContainerFailed|failed after 30m' "$log_file" || true

echo
echo '== readiness step metadata =='
curl --fail --location --silent --show-error \
  "${prefix}/artifacts/e2e-agnostic-haproxy28-techpreview/nodes-readiness/finished.json" \
  || true

echo
echo '== artifact references near nodes-readiness =='
grep -inE -C 3 'artifacts/.{0,100}(nodes-readiness|nodes)' "$log_file" || true

Length of output: 13215


@gcs278, the job failed during cluster provisioning. It did not run the e2e tests.

The nodes-readiness pre-step required six Ready nodes. It found five Ready nodes for 30 minutes, then failed:

[ERROR] Timeout reached. 6 ready nodes expected, found 5... Failing.

The incomplete MachineSet was:

ci-op-wrct1ljw-28250-9zvdj-worker-f
DESIRED: 1
CURRENT: 1
READY: 0
AVAILABLE: 0

The other two worker MachineSets were Ready. The cluster therefore had three control-plane nodes and only two Ready worker nodes.

This failure is in CI infrastructure or cluster provisioning. The log does not show an HAProxy error, a router test failure, or evidence that either PR caused the failure. Retrying the job is appropriate.

You are interacting with an AI system.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

jobs=(
  'multi-pr-openshift-router-832-openshift-origin-31494-e2e-agnostic-haproxy28-techpreview/2085760173623742464'
  'multi-pr-openshift-router-832-openshift-origin-31494-e2e-aws-serial-haproxy28-techpreview/2085718225097592832'
)
prefix='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs'

for job in "${jobs[@]}"; do
  echo "===== JOB: $job ====="
  log="$(mktemp)"
  trap 'rm -f "$log"' EXIT
  curl --fail --location --silent --show-error "$prefix/$job/build-log.txt" > "$log"

  echo '--- finished.json ---'
  curl --fail --location --silent --show-error "$prefix/$job/finished.json" || true
  echo

  echo '--- failure signatures and test summary ---'
  grep -inE -C 10 \
    'fail(ure|ed)?|error:|panic:|timed out|timeout|not ready|test .*(failed|passed)|[0-9]+ specs?, [0-9]+ failures?|ginkgo' \
    "$log" | tail -n 500 || true

  echo '--- final log section ---'
  tail -n 180 "$log"
  rm -f "$log"
  trap - EXIT
  echo
done

Length of output: 201535


🏁 Script executed:

#!/bin/bash
set -euo pipefail

bucket='test-platform-results'
jobs=(
  'logs/multi-pr-openshift-router-832-openshift-origin-31494-e2e-agnostic-haproxy28-techpreview/2085760173623742464'
  'logs/multi-pr-openshift-router-832-openshift-origin-31494-e2e-aws-serial-haproxy28-techpreview/2085718225097592832'
)

for job in "${jobs[@]}"; do
  echo "===== $job ====="
  prefix="${job}/artifacts/junit/"
  objects="$(
    curl --fail --location --silent --show-error \
      --get "https://storage.googleapis.com/storage/v1/b/${bucket}/o" \
      --data-urlencode "prefix=${prefix}" \
      --data-urlencode 'fields=items(name),nextPageToken' \
    | jq -r '.items[]?.name'
  )"
  printf '%s\n' "$objects" | grep -E 'junit_e2e.*\.xml$|junit.*\.xml$' | head -n 30

  while IFS= read -r object; do
    [ -n "$object" ] || continue
    case "$object" in
      *junit_e2e*.xml)
        echo "--- $object: failed test cases ---"
        curl --fail --location --silent --show-error \
          "https://storage.googleapis.com/download/storage/v1/b/${bucket}/o/$(jq -rn --arg v "$object" '$v|`@uri`')?alt=media" \
          | python3 -c '
import sys
import xml.etree.ElementTree as ET
root = ET.parse(sys.stdin).getroot()
for case in root.iter("testcase"):
    failure = case.find("failure")
    error = case.find("error")
    if failure is not None or error is not None:
        node = failure if failure is not None else error
        print(f"classname={case.get("classname")}\nname={case.get("name")}\ntype={node.get("type")}\nmessage={node.get("message")}\noutput={(node.text or "").strip()[:5000]}\n---")
'
        ;;
    esac
  done <<< "$objects"
done

Length of output: 2076


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs'
reports=(
  'multi-pr-openshift-router-832-openshift-origin-31494-e2e-agnostic-haproxy28-techpreview/2085760173623742464/artifacts/e2e-agnostic-haproxy28-techpreview/junit/junit_e2e__20260807-171953.xml'
)

for report in "${reports[@]}"; do
  echo "===== $report ====="
  curl --fail --location --silent --show-error "$base/$report" \
    | python3 -c '
import sys
import xml.etree.ElementTree as ET
root = ET.parse(sys.stdin).getroot()
found = False
for case in root.iter("testcase"):
    node = case.find("failure") or case.find("error")
    if node is not None:
        found = True
        print("classname:", case.get("classname"))
        print("name:", case.get("name"))
        print("message:", node.get("message"))
        print((node.text or "").strip()[:8000])
        print("---")
if not found:
    print("No failed test cases in this report.")
'
done

Length of output: 1861


@jcmoraisjr, these failures do not show an HAProxy 2.8 or router regression.

e2e-agnostic-haproxy28-techpreview

The test suite ran to completion. It had:

  • 2355 passed
  • 1 flaky
  • 2228 skipped
  • 3 informing failures
  • 1 blocking failure

The blocking failure was:

[sig-cli] oc adm new-project
[apigroup:project.openshift.io][apigroup:authorization.openshift.io]
[Suite:openshift/conformance/parallel]

This is a project API and authorization test. The log contains no HAProxy, router pod, ingress, or route failure associated with it. I could not retrieve a parseable JUnit artifact for the exact assertion, so the root cause of this individual test failure is inconclusive from the available artifacts.

e2e-aws-serial-haproxy28-techpreview

This job failed because Prow ended the test process after its four-hour limit:

Process did not finish before 4h0m0s timeout
error: process timed out

The suite had reached test 101 of 116 when the timeout occurred:

[sig-cli] Workloads test oc works well ... check oc adm prune deployments to prune RS

The suite also had five failures in AWSDedicatedHosts tests. Each failed before the test body because the cluster had no installer-created worker MachineSet:

cluster should have at least 1 worker machine set created by installer
Expected <int>: 0 not to equal <int>: 0

That is a test-cluster configuration or test-selection issue. It is not an HAProxy failure.

The AWS serial job did execute router-related Gateway API tests, and those tests passed. For example:

[Feature:Router] Ensure gateway loadbalancer service and dnsrecords could be deleted and then get recreated

Conclusion: Retry both jobs. The agnostic failure is an isolated oc adm new-project failure with no available evidence of a router connection. The AWS serial failure is primarily a Prow timeout, with unrelated Dedicated Hosts tests failing due to the cluster having zero worker MachineSets.

You are interacting with an AI system.

@jcmoraisjr

Copy link
Copy Markdown
Member Author

/testwith openshift/router/master/e2e-aws-serial-haproxy28-techpreview openshift/origin#31494

@jcmoraisjr

Copy link
Copy Markdown
Member Author

/testwith openshift/router/master/e2e-agnostic-haproxy28-techpreview openshift/origin#31494

@gcs278

gcs278 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

/test e2e-metal-ipi-ovn-dualstack
/test e2e-metal-ipi-ovn-ipv6
/test e2e-metal-ipi-ovn-router

@gcs278

gcs278 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

/payload-job periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-upgrade

@openshift-ci

openshift-ci Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@gcs278: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-upgrade

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/399a4c60-94de-11f1-895c-5343e08ac569-0

@gcs278

gcs278 commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

/payload-aggregate periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn 5

@openshift-ci

openshift-ci Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@gcs278: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/7dec1330-94de-11f1-93c6-3820c168e1f9-0

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

payload_urls=(
  'https://pr-payload-tests.ci.openshift.org/runs/ci/399a4c60-94de-11f1-895c-5343e08ac569-0'
  'https://pr-payload-tests.ci.openshift.org/runs/ci/7dec1330-94de-11f1-93c6-3820c168e1f9-0'
)
prow_page='https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_router/832/pull-ci-openshift-router-master-e2e-metal-ipi-ovn-dualstack/2086837104960081920'
prow_prefix='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_router/832/pull-ci-openshift-router-master-e2e-metal-ipi-ovn-dualstack/2086837104960081920'

for url in "${payload_urls[@]}"; do
  echo "===== PAYLOAD RUN: $url ====="
  curl --fail --location --silent --show-error "$url" | sed -n '1,240p' || true
  echo
done

echo "===== PROW PAGE ====="
curl --fail --location --silent --show-error "$prow_page" | sed -n '1,180p' || true

echo "===== PROW METADATA ====="
for object in prowjob.json started.json finished.json; do
  echo "--- $object ---"
  curl --fail --location --silent --show-error "$prow_prefix/$object" || true
  echo
done

echo "===== PROW FAILURE SIGNALS ====="
log="$(mktemp)"
trap 'rm -f "$log"' EXIT
curl --fail --location --silent --show-error "$prow_prefix/build-log.txt" >"$log" || true
grep -inE -C 6 \
  'haproxy|router|ingress|route|failure|failed|error:|panic:|timeout|[0-9]+ specs?, [0-9]+ failures?' \
  "$log" | tail -n 1200 || true

echo "===== PROW ARTIFACT INDEX ====="
curl --fail --location --silent --show-error \
  'https://storage.googleapis.com/storage/v1/b/test-platform-results/o?prefix=pr-logs%2Fpull%2Fopenshift_router%2F832%2Fpull-ci-openshift-router-master-e2e-metal-ipi-ovn-dualstack%2F2086837104960081920%2Fartifacts%2F&fields=items(name),nextPageToken' \
  | jq -r '.items[]?.name' | head -n 400 || true

Length of output: 202362


🏁 Script executed:

#!/bin/bash
set -euo pipefail

prow_prefix='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_router/832/pull-ci-openshift-router-master-e2e-metal-ipi-ovn-dualstack/2086837104960081920'
junit_path='artifacts/e2e-metal-ipi-ovn-dualstack/baremetalds-e2e-test/artifacts/junit/junit_e2e__20260810-170905.xml'

echo '===== PROW FAILED JUNIT CASES ====='
curl --fail --location --silent --show-error "$prow_prefix/$junit_path" |
python3 -c '
import sys
import xml.etree.ElementTree as ET
root=ET.parse(sys.stdin).getroot()
for tc in root.iter("testcase"):
    node=tc.find("failure")
    if node is None:
        node=tc.find("error")
    if node is not None:
        print("CLASS:",tc.get("classname"))
        print("NAME:",tc.get("name"))
        print("TYPE:",node.get("type"))
        print("MESSAGE:",node.get("message"))
        print((node.text or "").strip()[:16000])
        print("---")
'

echo '===== HAProxy IMAGE BUILD VERIFICATION ====='
for image in haproxy-router-amd64 haproxy-router-haproxy28-amd64 haproxy-router-haproxy32-amd64; do
  echo "--- $image ---"
  curl --fail --location --silent --show-error "$prow_prefix/artifacts/build-logs/$image.log" |
    grep -inE -C 3 'haproxy.*(version|2\.8\.27|3\.2\.22)|error|failed|complete|success' | tail -n 160 || true
done

for id in '399a4c60-94de-11f1-895c-5343e08ac569-0' '7dec1330-94de-11f1-93c6-3820c168e1f9-0'; do
  page="$(mktemp)"
  trap 'rm -f "$page"' EXIT
  curl --fail --location --silent --show-error \
    "https://pr-payload-tests.ci.openshift.org/runs/ci/$id" >"$page"
  echo "===== PAYLOAD $id: PAGE SIGNALS ====="
  grep -inE -C 3 \
    'failed|failure|error|success|passed|job|prow|test-platform-results|api/' \
    "$page" | head -n 500 || true
  echo "===== PAYLOAD $id: LINK TARGETS ====="
  grep -oE 'https?://[^"[:space:]<>]+' "$page" |
    sed 's/[),;]$//' |
    grep -Ei 'prow|test-platform|payload|ci-openshift|gcs' |
    sort -u | head -n 200 || true
  rm -f "$page"
  trap - EXIT
done

Length of output: 28704


🏁 Script executed:

#!/bin/bash
set -euo pipefail

jobs=(
  'logs/openshift-router-832-ci-5.0-e2e-aws-ovn-upgrade/2086862478704119808'
  'logs/aggregator-periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn/2086862963305615360'
)
gcs='https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results'

for job in "${jobs[@]}"; do
  prefix="$gcs/$job"
  echo "===== $job: METADATA ====="
  for obj in prowjob.json started.json finished.json; do
    echo "--- $obj ---"
    curl --fail --location --silent --show-error "$prefix/$obj" || true
    echo
  done
  echo "===== $job: BUILD LOG SUMMARY ====="
  curl --fail --location --silent --show-error "$prefix/build-log.txt" |
    grep -inE -C 5 \
      'blocking test failures|informing test failures|suite run returned|[0-9]+ specs?, [0-9]+ failures?|process timed out|failed|error:|haproxy|router|ingress|route' |
    tail -n 800 || true
  echo "===== $job: ARTIFACT NAMES ====="
  encoded_prefix="$(printf '%s/artifacts/' "$job" | jq -sRr `@uri`)"
  curl --fail --location --silent --show-error \
    "https://storage.googleapis.com/storage/v1/b/test-platform-results/o?prefix=$encoded_prefix&fields=items(name),nextPageToken" |
    jq -r '.items[]?.name' |
    grep -E 'junit.*\.(xml|json)$|e2e.*\.log$|build-log\.txt$|finished\.json$' |
    head -n 300 || true
done

bare_prefix="$gcs/pr-logs/pull/openshift_router/832/pull-ci-openshift-router-master-e2e-metal-ipi-ovn-dualstack/2086837104960081920"
e2e_path='artifacts/e2e-metal-ipi-ovn-dualstack/baremetalds-e2e-test/artifacts/e2e.log'
log="$(mktemp)"
trap 'rm -f "$log"' EXIT
curl --fail --location --silent --show-error "$bare_prefix/$e2e_path" >"$log"

echo '===== BARE-METAL: CONFLICTING STATUS TEST CONTEXT ====='
grep -inE -C 35 \
  'The HAProxy router converges when multiple routers are writing conflicting status|stress\.go:240|conflicting status' \
  "$log" || true

echo '===== BARE-METAL: HAProxy OR ROUTER ERROR SIGNALS ====='
grep -inE -C 4 \
  'router-e2e|haproxy.*(error|fatal|panic|fail)|error.*haproxy|segmentation fault|back-end|backend.*down|connection refused' \
  "$log" | tail -n 700 || true

Length of output: 103868


@gcs278: I found one failure that is router-related. I do not find evidence that it is an HAProxy 2.8.27 or 3.2.22 regression.

  • The AWS OVN upgrade payload run passed. It built the PR images and completed the upgrade job successfully.

  • The AWS OVN aggregate run did not execute or report a test failure. Its aggregator pod was deleted unexpectedly. This is CI infrastructure failure data, not an HAProxy failure.

  • The bare-metal dual-stack run had one blocking router test failure:

    The HAProxy router converges when multiple routers are writing conflicting status
    

    The test expected 20 route ingress status entries from the conflicting router. It consistently observed 19 until the timeout.

    waiting for 20 ingresses for "conflicting", got 19
    

    This is relevant to router status reconciliation. It is not evidence of a data-plane HAProxy failure.

The failed test routers reached Ready=True. They completed reloads with successful health checks. The log contains initial socket-scrape errors during startup:

can't scrape HAProxy: dial unix /var/lib/haproxy/run/haproxy.sock: connect: no such file or directory

These occurred before the first successful reload and readiness checks. The test log does not show an HAProxy crash, configuration parse error, reload failure, or failed route traffic.

Several nearby router tests passed. These include normal multi-router status convergence, overlapping route configurations, router health checks, route metrics, and unrecognized-host handling.

Conclusion: The bare-metal result is worth retrying because it is a router status test. I would not block the HAProxy update on this single timeout unless it reproduces. The successful AWS upgrade run is positive evidence for the candidate images.

You are interacting with an AI system.

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Perf & Scale results of haproxy 3.2.19 vs 3.2.22

HAProxy 3.2.22 vs 3.2.19 perf results look clean. No major concerns.

RPS (requests/sec):

  • edge: 96.7K → 95.7K (~1% lower)
  • http: 137K → 137K (flat)
  • passthrough: 253K → 268K (~6% better)
  • reencrypt: 62.3K → 60.2K (~3% lower)

Latency:

  • edge: 37.6ms → 38.5ms (~2% higher)
  • http: 26.2ms → 26.3ms (flat)
  • passthrough: 14.2ms → 13.4ms (~6% better)
  • reencrypt: 57.8ms → 59.7ms (~3% higher)

HAProxy CPU:

  • edge: 284.5% → 295.7% (~4% higher)
  • http: 246.6% → 263.8% (~7% higher)
  • passthrough: 211.8% → 213.1% (~1% higher)
  • reencrypt: 235.8% → 226.8% (~4% lower)

CPU is a few percent higher on edge/http but lower on reencrypt and flat on passthrough — no consistent directional trend, looks like run-to-run variance on shared cloud infra rather than a real regression. Zero errors/timeouts on both.

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

/test ?

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

/test e2e-agnostic-haproxy28
/test e2e-aws-fips-haproxy28
/test e2e-aws-serial-haproxy28-1of2
/test e2e-aws-serial-haproxy28-2of2
/test e2e-upgrade-haproxy28
/test perfscale-aws-ingress-perf-haproxy28

@openshift-ci

openshift-ci Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

@jcmoraisjr: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-aws-serial-haproxy28-techpreview-2of2 2a91b85 link false /test e2e-aws-serial-haproxy28-techpreview-2of2
ci/prow/e2e-aws-serial-haproxy28-techpreview-1of2 2a91b85 link false /test e2e-aws-serial-haproxy28-techpreview-1of2
ci/prow/e2e-upgrade-haproxy28-techpreview 2a91b85 link false /test e2e-upgrade-haproxy28-techpreview
ci/prow/e2e-agnostic-haproxy28-techpreview 2a91b85 link false /test e2e-agnostic-haproxy28-techpreview
ci/prow/e2e-metal-ipi-ovn-dualstack 2a91b85 link false /test e2e-metal-ipi-ovn-dualstack

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

HAProxy 2.8.27 vs 2.8.18 perf results look acceptable. No major concerns. Note: There's a bug with the Perf & Scale logic cloud-bulldozer/ingress-perf#88. It's reporting HAProxy 3.2 because it queries the monolithic router container. This run is actually HAProxy 2.8.27:

85955b10-14be-4267-a522-e9a453594f06 2026-08-11 03:50:47 AWSself-managed ci-op-ykg19i6r-f2ccf-j26vt5.0.0-0.ci-2026-08-11-021432-test-ci-op-ykg19i6r-latest haproxy32-3.2.22-1.rhocp.el9.x86_64 OVNKubernetes 3c5.4xlarge9

Also, I'm comparing to 2.8 from July 8 (since that's the last time we had a periodic running with HAProxy 28 was the least noisy). We should also add periodic perf & scale for HAProxy28 versions in openshift/release#83066.

HAProxy 2.8.27 vs 2.8.18 perf results (baseline: 60a7d3fb, 2026-07-08). Edge dip is consistent across three baselines.

RPS (requests/sec):

  • edge: 101.5K → 92.3K (~9% worse)
  • http: 147.1K → 148.7K (~1% better)
  • passthrough: 274.1K → 291.1K (~6% better)
  • reencrypt: 85.9K → 81.3K (~5% worse)

Latency:

  • edge: 36.7ms → 39.8ms (~8% worse)
  • http: 24.6ms → 24.5ms (flat)
  • passthrough: 13.3ms → 12.3ms (~8% better)
  • reencrypt: 46.4ms → 45.9ms (~1% better)

HAProxy CPU:

  • edge: 286.2% → 288.7% (flat)
  • http: 259.0% → 250.4% (~3% better)
  • passthrough: 199.8% → 213.9% (~7% worse)
  • reencrypt: 270.4% → 276.1% (~2% worse)

Edge and reencrypt show consistent RPS dips (~9% and ~5%) across all three baselines tested. Http and passthrough are flat or better. The pattern correlates with TLS termination — both affected termination types terminate client TLS, while the unaffected ones don't. HAProxy CPU is roughly flat, suggesting slightly less efficient per-request processing rather than doing dramatically more work. Zero errors/timeouts on both.

Not terribly concerning - but the edge drop is something to note.

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

/test perfscale-aws-ingress-perf-haproxy28

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

@jcmoraisjr I compared the most recent run too.

HAProxy 2.8.27 vs 2.8.18 perf results (baseline: 60a7d3fb, 2026-07-08; run 2). Edge and reencrypt dip confirmed.

RPS (requests/sec):

  • edge: 101.5K → 88.7K (~13% worse)
  • http: 147.1K → 144.7K (~2% worse)
  • passthrough: 274.1K → 276.2K (flat)
  • reencrypt: 85.9K → 79.4K (~8% worse)

Latency:

  • edge: 36.7ms → 41.5ms (~13% worse)
  • http: 24.6ms → 25.0ms (~2% worse)
  • passthrough: 13.3ms → 13.1ms (~2% better)
  • reencrypt: 46.4ms → 47.8ms (~3% worse)

HAProxy CPU:

  • edge: 286.2% → 290.7% (~2% worse)
  • http: 259.0% → 253.8% (~2% better)
  • passthrough: 199.8% → 207.4% (~4% worse)
  • reencrypt: 270.4% → 279.3% (~3% worse)

Edge dip is now ~13% on this run — worse than the previous ~9%. Reencrypt is ~8% worse. Http is slightly worse at ~2% (first time it's dipped). Passthrough still flat. The TLS termination correlation holds.

However, let me run a new haproxy 2.8.18 - these are from last month, and I wonder if for some reason the Perf environment is slower now. I'll have to open a blank PR and run the test.

@gcs278

gcs278 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Kicked off a 2.8.18 in #833 that we can make sure we compare with a current baseline

@gcs278

gcs278 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

/test perfscale-aws-ingress-perf-haproxy28

@gcs278

gcs278 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

@jcmoraisjr another comparison, with a new baseline ran from #833. I think this mostly confirms: there really seems to be a slightly performance regression in edge:

HAProxy 2.8.27 (23ef07ff) vs 2.8.18 (d1ee8324) perf results (same day runs, both 2.8). Grafana dashboard

RPS (requests/sec):

  • edge: 97.3K → 88.7K (~9% worse)
  • http: 136.2K → 144.7K (~6% better)
  • passthrough: 270.2K → 276.2K (~2% better)
  • reencrypt: 80.5K → 79.4K (~1% worse)

Latency:

  • edge: 37.9ms → 41.5ms (~9% worse)
  • http: 26.4ms → 25.0ms (~5% better)
  • passthrough: 13.3ms → 13.1ms (~2% better)
  • reencrypt: 47.5ms → 47.8ms (flat)

HAProxy CPU:

  • edge: 287.2% → 290.7% (~1% worse)
  • http: 250.7% → 253.8% (~1% worse)
  • passthrough: 206.4% → 207.4% (flat)
  • reencrypt: 273.0% → 279.3% (~2% worse)

Edge dip (~9%) is consistent across multiple comparisons. Http, passthrough, and reencrypt are flat or better. Zero errors/timeouts on both.

@jcmoraisjr

jcmoraisjr commented Aug 12, 2026

Copy link
Copy Markdown
Member Author

haproxy 2.8.27 updated to scratch-build in the same URL.

/test perfscale-aws-ingress-perf-haproxy28

@gcs278

gcs278 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

@jcmoraisjr with the new perf scale results. Actually looks even worse 😭

HAProxy 2.8.27 (758dc915) vs 2.8.18 (d1ee8324) perf results. Regression across all termination types this run.

RPS (requests/sec):

  • edge: 97.3K → 78.5K (~19% worse)
  • http: 136.2K → 132.1K (~3% worse)
  • passthrough: 270.2K → 259.4K (~4% worse)
  • reencrypt: 80.5K → 70.4K (~13% worse)

Latency:

  • edge: 37.9ms → 46.4ms (~22% worse)
  • http: 26.4ms → 27.3ms (~3% worse)
  • passthrough: 13.3ms → 13.9ms (~4% worse)
  • reencrypt: 47.5ms → 53.2ms (~12% worse)

HAProxy CPU:

  • edge: 287.2% → 281.9% (~2% better)
  • http: 250.7% → 258.5% (~3% worse)
  • passthrough: 206.4% → 212.7% (~3% worse)
  • reencrypt: 273.0% → 269.8% (~1% better)

This is the worst run yet — edge dropped ~19% and reencrypt ~13%. All four termination types are worse. The 2.8.27 run (758dc915) may have hit a particularly noisy cloud node, or this is confirming a real regression. Worth comparing against the other 2.8.27 runs (85955b10, 23ef07ff) which showed smaller dips (~9% edge) to judge whether this is an outlier.

@gcs278

gcs278 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

/test perfscale-aws-ingress-perf-haproxy28

@jcmoraisjr

Copy link
Copy Markdown
Member Author

Patched 2.8.27, reverting cf28276b3468

/test perfscale-aws-ingress-perf-haproxy28

@jcmoraisjr

Copy link
Copy Markdown
Member Author

HAProxy 2.8.27 (9128146b) vs 2.8.18 (d1ee8324) perf results. They are much better after reverting HAProxy's cf28276b3468.

RPS (requests/sec):

  • edge: 97.3K → 101.2K (~4% better)
  • http: 136.2K → 144.8K (~6% better)
  • passthrough: 270.2K → 268.8K (~1% worse)
  • reencrypt: 80.5K → 84.5K (~5% better)

Latency:

  • edge: 37.9ms → 36.7ms (~3% better)
  • http: 26.4ms → 25.0ms (~5% better)
  • passthrough: 13.3ms → 13.6ms (~2% worse)
  • reencrypt: 47.5ms → 45.1ms (~5% better)

HAProxy CPU:

  • edge: 287.2% → 290.0% (~1% worse)
  • http: 250.7% → 253.0% (~1% worse)
  • passthrough: 206.4% → 215.0% (~4% worse)
  • reencrypt: 273.0% → 278.2% (~2% worse)

@jcmoraisjr

Copy link
Copy Markdown
Member Author

Running patched 2.8.27 once more.

/test perfscale-aws-ingress-perf-haproxy28

@jcmoraisjr

jcmoraisjr commented Aug 14, 2026

Copy link
Copy Markdown
Member Author

HAProxy 2.8.27 (38858503) vs 2.8.18 (d1ee8324) perf results.

They are mostly flat compared to 2.8.18 except the reencrypt test. Rencrypt however has also a much better CPU usage, decreasing in a similar rate, which suggests that the machine didn't provide everything HAProxy asked, maybe due to a noisy neighborhood during this test. Lets run another one as the tie break.

RPS (requests/sec):

  • edge: 97.3K → 94.9K (~3% worse)
  • http: 136.2K → 134.3K (~1% better)
  • passthrough: 270.2K → 259.5K (~4% better)
  • reencrypt: 80.5K → 65.4K (~19% worse)

Latency:

  • edge: 37.9ms → 39.2ms (~3% worse)
  • http: 26.4ms → 26.8ms (~2% worse)
  • passthrough: 13.3ms → 13.8ms (~4% worse)
  • reencrypt: 47.5ms → 55.1ms (~16% worse)

HAProxy CPU:

  • edge: 287.2% → 283.3% (~1% worse)
  • http: 250.7% → 260.6% (~4% worse)
  • passthrough: 206.4% → 214.6% (~4% worse)
  • reencrypt: 273.0% → 230.2% (~16% better)

@jcmoraisjr

Copy link
Copy Markdown
Member Author

Tie break

/test perfscale-aws-ingress-perf-haproxy28

@jcmoraisjr

Copy link
Copy Markdown
Member Author

HAProxy 2.8.27 (c7c55d0c) vs 2.8.18 (d1ee8324) perf results.

They are mostly flat now compared with 2.8.18, so we can confirm the previous reencrypt results was unrealistic.

RPS (requests/sec):

  • edge: 97.3K → 100.1K (~3% better)
  • http: 136.2K → 142.6K (~5% better)
  • passthrough: 270.2K → 277.4K (~3% better)
  • reencrypt: 80.5K → 84.0K (~4% better)

Latency:

  • edge: 37.9ms → 36.9ms (~3% better)
  • http: 26.4ms → 25.4ms (~4% better)
  • passthrough: 13.3ms → 13.2ms (~1% better)
  • reencrypt: 47.5ms → 45.6ms (~4% better)

HAProxy CPU:

  • edge: 287.2% → 289.6% (~1% worse)
  • http: 250.7% → 256.9% (~2% worse)
  • passthrough: 206.4% → 212.1% (~3% worse)
  • reencrypt: 273.0% → 271.1% (~1% better)

@jcmoraisjr

Copy link
Copy Markdown
Member Author

We're done, this can be closed now

/close

@openshift-ci openshift-ci Bot closed this Aug 14, 2026
@openshift-ci

openshift-ci Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

@jcmoraisjr: Closed this PR.

Details

In response to this:

We're done, this can be closed now

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@jcmoraisjr
jcmoraisjr deleted the haproxy-bump branch August 14, 2026 17:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants